/*
 * 文件名：LongStr2DateUtil.java
 * 版权：Copyright by will_awoke
 * 描述：
 * 修改人：will_awoke
 * 修改时间：2014-6-27
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */

package com.qbgs.util;


import java.util.Date;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;


/**
 * Long型时间解析成Date类型时间
 * 由于微信传递过来的时间是Long型，而DB中是date型，故需要转换。
 * 
 * 注：微信消息创建时间CreateTime，它表示1970年1月1日0时0分0秒至消息创建时所间隔的秒数，注意是间隔的秒数，不是毫秒数。
 * 而System.currentTimeMillis()返回的是毫秒数，存在1000的数量级差距。
 * @author will_awoke
 * @version 2014-6-27
 * @see LongStr2DateUtil
 * @since
 */
public class LongStr2DateUtil
{

    /**
     * 日志
     */
    private static final Logger LOG = Logger.getLogger(LongStr2DateUtil.class);

    /**
     * 日期格式
     */
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 解析（支持秒和毫秒）
     * @param longStr long型时间字符串
     * @param isMills 是否是毫秒，微信时间以秒为单位，isMills=false
     * @return 
     * @see
     */
    public static Date parse(String longStr, boolean isMills)
    {
        Date parse = new Date();
        try
        {
            long longs = 0L;
            if (isMills)
            {
                longs = Long.parseLong(longStr);
            }
            else
            {
                longs = Long.parseLong(longStr) * 1000L;
            }
            //Allocates a Date object and initializes it to represent the specified number of milliseconds 
            //since the standard base time known as "the epoch", namely January 1, 1970, 00:00:00 GMT.
            String date = DateFormatUtils.format(new Date(longs), DATE_FORMAT);
            parse = DateUtils.parseDate(date, new String[] {DATE_FORMAT});
        }
        catch (Exception e)
        {
            LOG.error("parseDate occur exception : " + e);
        }
        return parse;
    }

    /**  
     * @param args 
     * @see 
     */
    public static void main(String[] args)
    {
        Date date = parse(String.valueOf(System.currentTimeMillis()), true);
        LOG.info(DateFormatUtils.format(date, DATE_FORMAT));
        
        //微信时间格式
        Date date1 = parse(String.valueOf("1403599966"), false);
        LOG.info(DateFormatUtils.format(date1, DATE_FORMAT));
        
    }
}
